Reset the existing slave before removing it to give it a chance to commit
authorOwen Taylor <otaylor@redhat.com>
Wed, 12 Dec 2001 22:35:31 +0000 (22:35 +0000)
committerOwen Taylor <otaylor@src.gnome.org>
Wed, 12 Dec 2001 22:35:31 +0000 (22:35 +0000)
Wed Dec 12 17:22:45 2001  Owen Taylor  <otaylor@redhat.com>
* gtk/gtkimmulticontext.c (gtk_im_multicontext_set_slave):
Reset the existing slave before removing it to give
it a chance to commit and emit "preedit_changed"
in case there was still a preedit string.

ChangeLog
ChangeLog.pre-2-0
ChangeLog.pre-2-10
ChangeLog.pre-2-2
ChangeLog.pre-2-4
ChangeLog.pre-2-6
ChangeLog.pre-2-8
gtk/gtkimmulticontext.c

index dd2da1e6029fef0d975edf9bc3c3874a7fa3469e..9d179f86ba6f4b83fe90fd62cb116b5f0f3bb641 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+Wed Dec 12 17:22:45 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * gtk/gtkimmulticontext.c (gtk_im_multicontext_set_slave):
+       Reset the existing slave before removing it to give
+       it a chance to commit and emit "preedit_changed" 
+       in case there was still a preedit string.
+
 2001-12-12  Matthias Clasen  <matthiasc@poet.de>
        
        * gtk/gtktextlayout.c: Typo fixes
index dd2da1e6029fef0d975edf9bc3c3874a7fa3469e..9d179f86ba6f4b83fe90fd62cb116b5f0f3bb641 100644 (file)
@@ -1,3 +1,10 @@
+Wed Dec 12 17:22:45 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * gtk/gtkimmulticontext.c (gtk_im_multicontext_set_slave):
+       Reset the existing slave before removing it to give
+       it a chance to commit and emit "preedit_changed" 
+       in case there was still a preedit string.
+
 2001-12-12  Matthias Clasen  <matthiasc@poet.de>
        
        * gtk/gtktextlayout.c: Typo fixes
index dd2da1e6029fef0d975edf9bc3c3874a7fa3469e..9d179f86ba6f4b83fe90fd62cb116b5f0f3bb641 100644 (file)
@@ -1,3 +1,10 @@
+Wed Dec 12 17:22:45 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * gtk/gtkimmulticontext.c (gtk_im_multicontext_set_slave):
+       Reset the existing slave before removing it to give
+       it a chance to commit and emit "preedit_changed" 
+       in case there was still a preedit string.
+
 2001-12-12  Matthias Clasen  <matthiasc@poet.de>
        
        * gtk/gtktextlayout.c: Typo fixes
index dd2da1e6029fef0d975edf9bc3c3874a7fa3469e..9d179f86ba6f4b83fe90fd62cb116b5f0f3bb641 100644 (file)
@@ -1,3 +1,10 @@
+Wed Dec 12 17:22:45 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * gtk/gtkimmulticontext.c (gtk_im_multicontext_set_slave):
+       Reset the existing slave before removing it to give
+       it a chance to commit and emit "preedit_changed" 
+       in case there was still a preedit string.
+
 2001-12-12  Matthias Clasen  <matthiasc@poet.de>
        
        * gtk/gtktextlayout.c: Typo fixes
index dd2da1e6029fef0d975edf9bc3c3874a7fa3469e..9d179f86ba6f4b83fe90fd62cb116b5f0f3bb641 100644 (file)
@@ -1,3 +1,10 @@
+Wed Dec 12 17:22:45 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * gtk/gtkimmulticontext.c (gtk_im_multicontext_set_slave):
+       Reset the existing slave before removing it to give
+       it a chance to commit and emit "preedit_changed" 
+       in case there was still a preedit string.
+
 2001-12-12  Matthias Clasen  <matthiasc@poet.de>
        
        * gtk/gtktextlayout.c: Typo fixes
index dd2da1e6029fef0d975edf9bc3c3874a7fa3469e..9d179f86ba6f4b83fe90fd62cb116b5f0f3bb641 100644 (file)
@@ -1,3 +1,10 @@
+Wed Dec 12 17:22:45 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * gtk/gtkimmulticontext.c (gtk_im_multicontext_set_slave):
+       Reset the existing slave before removing it to give
+       it a chance to commit and emit "preedit_changed" 
+       in case there was still a preedit string.
+
 2001-12-12  Matthias Clasen  <matthiasc@poet.de>
        
        * gtk/gtktextlayout.c: Typo fixes
index dd2da1e6029fef0d975edf9bc3c3874a7fa3469e..9d179f86ba6f4b83fe90fd62cb116b5f0f3bb641 100644 (file)
@@ -1,3 +1,10 @@
+Wed Dec 12 17:22:45 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * gtk/gtkimmulticontext.c (gtk_im_multicontext_set_slave):
+       Reset the existing slave before removing it to give
+       it a chance to commit and emit "preedit_changed" 
+       in case there was still a preedit string.
+
 2001-12-12  Matthias Clasen  <matthiasc@poet.de>
        
        * gtk/gtktextlayout.c: Typo fixes
index ea51bab2d1ccb9b55b37dd4bf227f1560f3599db..f95ef3e705aedfc982aba3b0535d59c313fd4e65 100644 (file)
@@ -30,7 +30,8 @@ static void     gtk_im_multicontext_init               (GtkIMMulticontext
 static void     gtk_im_multicontext_finalize           (GObject                 *object);
 
 static void     gtk_im_multicontext_set_slave          (GtkIMMulticontext       *multicontext,
-                                                       GtkIMContext            *slave);
+                                                       GtkIMContext            *slave,
+                                                       gboolean                 finalizing);
 
 static void     gtk_im_multicontext_set_client_window  (GtkIMContext            *context,
                                                        GdkWindow               *window);
@@ -146,17 +147,21 @@ gtk_im_multicontext_new (void)
 static void
 gtk_im_multicontext_finalize (GObject *object)
 {
-  gtk_im_multicontext_set_slave (GTK_IM_MULTICONTEXT (object), NULL);
+  gtk_im_multicontext_set_slave (GTK_IM_MULTICONTEXT (object), NULL, TRUE);
 
   G_OBJECT_CLASS (parent_class)->finalize (object);
 }
 
 static void
 gtk_im_multicontext_set_slave (GtkIMMulticontext *multicontext,
-                              GtkIMContext      *slave)
+                              GtkIMContext      *slave,
+                              gboolean           finalizing)
 {
   if (multicontext->slave)
     {
+      if (!finalizing)
+       gtk_im_context_reset (multicontext->slave);
+      
       g_signal_handlers_disconnect_by_func (multicontext->slave,
                                            gtk_im_multicontext_preedit_start_cb,
                                            multicontext);
@@ -169,8 +174,12 @@ gtk_im_multicontext_set_slave (GtkIMMulticontext *multicontext,
       g_signal_handlers_disconnect_by_func (multicontext->slave,
                                            gtk_im_multicontext_commit_cb,
                                            multicontext);
-      
+
       g_object_unref (multicontext->slave);
+      multicontext->slave = NULL;
+
+      if (!finalizing)
+       g_signal_emit_by_name (multicontext, "preedit_changed");
     }
   
   multicontext->slave = slave;
@@ -220,7 +229,7 @@ gtk_im_multicontext_get_slave (GtkIMMulticontext *multicontext)
          global_context_id = _gtk_im_module_get_default_context_id (locale);
        }
        
-      gtk_im_multicontext_set_slave (multicontext, _gtk_im_module_create (global_context_id));
+      gtk_im_multicontext_set_slave (multicontext, _gtk_im_module_create (global_context_id), FALSE);
       multicontext->context_id = global_context_id;
     }
 
@@ -285,7 +294,7 @@ gtk_im_multicontext_focus_in (GtkIMContext   *context)
    */
   if (!multicontext->context_id ||
       strcmp (global_context_id, multicontext->context_id) != 0)
-    gtk_im_multicontext_set_slave (multicontext, NULL);
+    gtk_im_multicontext_set_slave (multicontext, NULL, FALSE);
 
   slave = gtk_im_multicontext_get_slave (multicontext);
 
@@ -434,7 +443,7 @@ activate_cb (GtkWidget         *menuitem,
       gtk_im_context_reset (GTK_IM_CONTEXT (context));
       
       global_context_id = id;
-      gtk_im_multicontext_set_slave (context, NULL);
+      gtk_im_multicontext_set_slave (context, NULL, FALSE);
     }
 }